package com.example.demo.controller;

import com.example.demo.common.ThreadLocalUtil;
import com.example.demo.domain.dto.ResultDTO;
import com.example.demo.domain.po.Floor;
import com.example.demo.domain.query.FloorQuery;
import com.example.demo.domain.vo.FloorVO;
import com.example.demo.exception.MyException;
import com.example.demo.services.FloorServices;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("floor")

public class FloorController {
    @Autowired
    FloorServices floorServices;

    ResultDTO resultDTO = new ResultDTO();
    @GetMapping("/getAll")
    public ResultDTO getAll(ResultDTO resultDTO) {
        //通过分页插件实现！！！    ----> 前往配置文件
        //只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询（Select）方法会被分页。
        // （PageHelper 启动了一个新的线程）
        PageHelper.startPage(resultDTO.getPageNum(),resultDTO.getPageSize());
        List<FloorVO> all = floorServices.getAll();
        PageInfo<FloorVO> pageInfo = new PageInfo<>(all);
        //分页结束
        PageHelper.clearPage();

        if(resultDTO.getPageNum() <= 0 || resultDTO.getPageSize() <= 0){
            throw new MyException("当前页面数或者每页行数未设置（或为0）！");
        }
        //补齐总页数与总行数
        resultDTO.setPages(pageInfo.getPages());
        resultDTO.setTotal(pageInfo.getTotal());

        resultDTO.setData(all);
        resultDTO.setMessage("全局查询成功！");

//        Object o = ThreadLocalUtil.get();
//        System.out.println("当前用户： "+o);
        return resultDTO;
    }

    @GetMapping("/fuzzySearch")
    public ResultDTO fuzzySearch(ResultDTO resultDTO, FloorQuery floorQuery) {
        //通过分页插件实现！！！    ----> 前往配置文件
        //只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询（Select）方法会被分页。
        // （PageHelper 启动了一个新的线程）
        PageHelper.startPage(resultDTO.getPageNum(),resultDTO.getPageSize());
        List<FloorVO> all = floorServices.fuzzySearch(floorQuery);
        PageInfo<FloorVO> pageInfo = new PageInfo<>(all);
        //分页结束
        PageHelper.clearPage();

        if(resultDTO.getPageNum() <= 0 || resultDTO.getPageSize() <= 0){
            throw new MyException("当前页面数或者每页行数未设置（或为0）！");
        }
        //补齐总页数与总行数
        resultDTO.setPages(pageInfo.getPages());
        resultDTO.setTotal(pageInfo.getTotal());

        resultDTO.setData(all);
        resultDTO.setMessage("检索成功！");
        return resultDTO;
    }

    @GetMapping("/get")
    public ResultDTO get(int id) {
        resultDTO.setMessage("按ID查询成功！");
        resultDTO.setData(floorServices.get(id));
        return resultDTO;
    }

    @PostMapping("/edit")
    public ResultDTO edit(@RequestBody Floor floor) {
        floorServices.edit(floor);
        resultDTO.setMessage("修改成功！");
        return resultDTO;
    }

    @PostMapping("/add")
    public ResultDTO add(@RequestBody Floor floor) {
        floorServices.add(floor);
        resultDTO.setMessage("添加成功！");

        return resultDTO;
    }

    @GetMapping("del")
    public ResultDTO del(int id) {
        floorServices.del(id);
        resultDTO.setMessage("删除成功！");
        return resultDTO;
    }
}
